package com.ruoyi.school.service;

import com.ruoyi.school.domain.Student;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.school.domain.dto.ImportStudentInfo;
import com.ruoyi.school.domain.vo.SchoolHonorVo;
import com.ruoyi.system.domain.vo.StuCityVo;

import java.util.List;

/**
* @author jeremylin
* @description 针对表【student(学生)】的数据库操作Service
* @createDate 2025-05-24 16:57:35
*/
public interface StudentService extends IService<Student> {

    /**
     * 模糊查询学生列表
     * @param student
     * @return
     */
    List<Student> getAllByName(Student student);

    /**
     * 根据学生id批量查询
     * @param stuIds
     * @return
     */
    List<Student> selectByStuIds(List<Long> stuIds);

    /**
     * 查找学生信息
     * @param studentParams
     * @return
     */
    List<Student> selectInfo(Student studentParams);

    /**
     * 根据用户id查询学生信息
     * @param userId
     * @return
     */
    Student selectByUserId(Long userId);

    /**
     * 获取我的学生列表
     * @param student
     * @return
     */
    List<Student> getMyStuList(Student student);

    /**
     * 毕业生查询
     * @param student
     * @return
     */
    List<Student> getGraduatedStudent(Student student);

    /**
     * 查询学生
     * @param student
     * @return
     */
    Student selectOne(Student student);

    /**
     * 学生列表
     * @param student
     * @return
     */
    List<Student> getList(Student student);

    /**
     * 获取城市数据
     * @return
     */
    List<StuCityVo> getAllCity();

    /**
     * 获取在校荣誉
     * @return
     */
    List<SchoolHonorVo> getSchoolHonor(Student student);

    /**
     * 根据学号 查找学生信息
     * @param stuNum
     * @return
     */
    Student getOneByStuNum(String stuNum);

    /**
     * 根据用户id查询
     * @param userId
     * @return
     */
    Student getByUserId(Long userId);

    /**
     * 根据用户id，删除学生
     * @param userIds
     */
    void deleteStudentByUserIds(Long[] userIds);

    /**
     * 获取优秀学生列表
     * @param student
     * @return
     */
    List<?> getExcellentList(Student student);

    /**
     * 查询所有学生数据
     * @return
     */
    List<ImportStudentInfo> selectList();

    long countBypartyMembers();

    /**
     * 获取所有的学生 但是没有自己
     * @param student
     * @return
     */
    List<Student> getAllByNameNoMe(Student student);
}
